import { reqCartList, reqDeleteShopCartById, reqCheckCart } from "@/api"
const actions = {
    // 获取购物车裂表
    async getCartList({commit}) {
       let result = await reqCartList()
       // 测试是否能获得个人购物车数据    
       // console.log(result);
        if(result.code == 200) {
            commit('GETCARTLIST',result.data)
        }
    },
    // 删除购物车的某一个产品
    async deleteShopCartById({commit},skuId) {
       let result = await reqDeleteShopCartById(skuId)
       if(result.code == 200) {
        return 'ok'
       }else {
        return alert('')
       }
    },
    // 修改购物车某一个产品的选中状态
    async checkCart({commit},{skuId,isChecked}) {
        let result = await reqCheckCart(skuId,isChecked)
        if(result.code==200) {
            return 'ok'
        } else {
            return Promise.reject(new error('商品切换接口出错了'))
        }
    },
    // 切换选中状态的isChecked
    deleteAllCheckCartShop({dispatch,getters}) {
        // context:小仓库，commit【提交mutations修改state】getters【计算属性】dispatch[派发actions]
        // 获取购物车全部的产品 是一个数组
        let PromiseAll = []
        // 获取购物车产品的仓库
        getters.cartList.cartInfoList.forEach(item=>{
        // 判断如果isChecked是等于1的话就发送请求，不是即返回空
           let promise = item.isChecked==1?dispatch('deleteShopCartById',item.skuId):''
        // 把选中产品的添加到空数组中   
        PromiseAll.push(promise)
        }) 
        // 如果p1|p2成功，即返回成功
        // 如果有一个失败就全部，返回即为失败
       return Promise.all(PromiseAll)
    },
    // 点击全选和不全选的按钮
    dataAllShopCart({dispatch,state},isChecked) {
        let promiseAll = []
        // console.log(state);
        // console.log(skuId);
        state.cartList[0].cartInfoList.forEach(item=>{
           let promise = dispatch('checkCart',{skuId:item.skuId,isChecked})
        return promiseAll.push(promise)
        })
        return Promise.all(promiseAll)

    }
}

const mutations = {
    GETCARTLIST(state,cartList) {
        state.cartList = cartList
    }
}

const state = { 
    cartList:[] 
}              

const getters = {
    // 简化
    // cartInfoList(state) {
    //     return state.cartList[0].cartInfoList || []
    // }
    cartList(state) {
        return state.cartList[0] || []
    }
}

export default {
    actions,
    mutations,
    state,
    getters
}